package modele;

import java.awt.Color;
import java.io.Serializable;

public class Segment extends FormeGeometrique implements Serializable {

	private Point Origine;
	
	public void setOrigine(Point origine) {
		Origine = origine;
	}

	public void setExtremite(Point extremite) {
		Extremite = extremite;
	}

	private Point Extremite;
	public boolean is_origine = true;

	// constructeur par défaut sans argument
	public Segment() {
		// Si y'a rien c'est nul pour origine et extremite
	}

	// constructeur canonique : 1 argument par attribut
	public Segment(Point a, Point b) {
		Origine = a.createClone();
		Extremite = b.createClone();
	}

	public Segment(Point a, Point b, Color couleur) {
		Origine = a.createClone();
		Extremite = b.createClone();
		this.couleur = couleur;
		
	}

	// toString
	public String toString() {
		return new String("Coordonnées des points du segment :\n\t"
				+ this.Origine.toString() + "\n\t" + this.Extremite.toString());
	}

	// constructeur secondaire qui crée un clone du segment
	public Segment createClone() {
		Segment Resultat = new Segment(this.Origine.createClone(),this.Extremite.createClone(),this.getCouleur());
		return Resultat;
	}

	// constructeur secondaire qui crée un segment symetrique à l'origine
	public Segment createSymetrieO() {
		Segment Resultat = new Segment(this.Origine.createSymetrieO(),
				this.Extremite.createSymetrieO());
		return Resultat;
	}

	// equals
	public boolean equals(FormeGeometrique sujet) {
		if (sujet instanceof Segment) {
			return (this.Origine.equals(((Segment)sujet).Origine) && this.Extremite.equals(((Segment)sujet).Extremite));
		} else {
			return false;
		}
	}

	// mutateurs

	// transforme le segment en sa symetrie par rapport à 0
	public void symetrieO() {
		this.Origine.symetrieO();
		this.Extremite.symetrieO();
	}

	// transforme le segment en sa symetrie par rapport à l'axe X
	public void symetrieX() {
		this.Origine.symetrieX();
		this.Extremite.symetrieX();
	}

	// transforme le segment en sa symetrie par rapport à l'axe Y
	public void symetrieY() {
		this.Origine.symetrieY();
		this.Extremite.symetrieY();
	}

	// observateurs

	// observateurs canoniques
	public Point getOrigine() {
		return this.Origine;
	}

	public Point getExtremite() {
		return this.Extremite;
	}

	// autres observateurs
	public double getLongueur() {
		return this.Origine.distance(Extremite);
	}

	@Override
	public double perimetre() {
		return this.getLongueur();
	}

	@Override
	public double surface() {
		return 0;
	}

	@Override
	public void projectionX() {
		this.Origine.projectionX();
		this.Extremite.projectionX();
		
	}

	@Override
	public void projectionY() {
		this.Origine.projectionY();
		this.Extremite.projectionY();
		
	}

}
